/*
 * @Author: mayufo
 * @Date: 2020-02-16 14:37:55
 * @LastEditTime : 2020-02-16 22:02:19
 * @Description: demo2
 * @FilePath: /node/05/code/mongoose-demo/demo2.js
 */
var mongoose = require('mongoose')

var Schema = mongoose.Schema;
// 1.指定连接的数据库 数据库不需要存在，当你插入第一条数据之后就会自动被创建出来
mongoose.connect('mongodb://localhost:27017/itcast')


// 2.设计文档结构（表结构）
// 字段名称就是表结构中的属性名称
// 约束的目的保证数据的完整性，不要有脏数据

var userSchema = new Schema({
    username: {
        type: String,
        required: true // 必须有
    },
    password: {
        type: String,
        required: true // 必须有
    },
    email: {
        type: String
    }
})

// 上面也可以写成

// mongoose.model('User', new Schema({
//     ...Schema.length.toString.
// }))

// 导出时候可以写
// module.exports = mongoose.model('user', userSchema)

// 3. 将文档结构发布为模型
// mongoose.model 将一个架构发布为model
// 第一个参数：传入一个大写名词单数标识你的数据库名称
//           mongoose会自动将大写名词的字符串生成小写附属的集合名称
// 第二个参数：架构Schema
// 返回值： 模型构造函数
var User = mongoose.model('User', userSchema);


// 4. 当我们有了模型构造函数之后，就可以使用构造函数User中的数据(增删改查)


// 增加数据
// var admin = new User({
//     username: 'mayufo',
//     password: '5678',
//     email: 'admin@admin.com'
// })

// admin.save((err, data) => {
//     if (err) {
//         console.log('保存失败')
//     } else {
//         console.log('保存成功')
//         console.log(data)
//     }
// })

// 查询数据 所有
User.find((err, data) => {
    if (err) {
        console.log('查询失败')
    } else {
        console.log(data)
    }
})

// 按条件查询
// User.find({
//     username: 'mayufo'
// }, (err, data) => {
//     if (err) {
//         console.log('查询失败')
//     } else {
//         console.log(data)
//     }
// })

// 只找匹配的第一个 输出对象
// 如果没有条件 就根查出的第一个
// User.findOne({
//     username: 'mayufo'
// }, (err, data) => {
//     if (err) {
//         console.log('查询失败')
//     } else {
//         console.log(data)
//     }
// })

// 删除数据 删除name 是 mayufo
// User.remove({
//     username: 'mayufo'
// }, (err, res) => {
//     if (err) {
//         console.log('删除失败')
//     } else {
//         console.log('删除成功')
//         console.log(res)
//     }
// })

// 更新数据

User.findByIdAndUpdate('5e49449aab43c0280c494932', {
    password: 'mmmm'
}, function (err, res) {
    if (err) {
        console.log('更新失败')
    } else {
        console.log('更新成功')
        console.log(res)
    }
})


User.find((err, data) => {
    if (err) {
        console.log('查询失败')
    } else {
        console.log(data)
    }
})